ABC247 D - Cylinder
https://atcoder.jp/contests/abc247/tasks/abc247_d
提出
code: python
import queue
q = int(input())
query = list(map(int, input().split())) for _ in range(q)
que = queue.Queue()
# que.put('3' * 3)
# with que.mutex:
# print(que.queue)
# 文字列にしたら境目がなくなる
for quer in query:
if (quer0 == 1):
for _ in range(quer2):
que.put(quer1)
else:
res = 0
for _ in range(quer1):
res += que.get()
print(res)
解答
code: python
from collections import deque
q = int(input())
query = list(map(int, input().split())) for _ in range(q)
deq = deque()
for quer in query:
if quer0 == 1:
x, c = quer1, quer2
deq.append(x, c) # xが書かれたボールを右からc個入れる
else:
c = quer1 # cが0になるまでボールを取り出し続ける
res = 0 # 取り出したボールに書かれた数の合計
while c > 0:
num, cnt = deq0
if c >= cnt:
res += num * cnt
deq.popleft() # この塊のボールを全部取り出したので、deqから削除する
c -= cnt
else:
res += num * c
deq01 -= c
c = 0 # これ以上取り出さない
print(res)
メモ
【AtCoder解説】PythonでABC247のA,B,C,D,E,F問題を制する!
提出
code: python
from collections import deque
q = int(input())
queries = list(map(int, input().split())) for _ in range(q)
queue = deque()
# for query in queries:
# if query0 == 1:
# _, x, c = query
# # TOO MANY LOOP
# for _ in range(c):
# queue.append(x)
# else:
# _, c = query
# ans = 0
# for _ in range(c):
# ans += queue.popleft()
# print(ans)
# (2, 3) -> (2, 1) -> (2, 1), (3, 4) -> (3, 2)
for query in queries:
if query0 == 1:
_, x, c = query
queue.append((x, c))
else:
_, c = query
ans = 0
while c > 0:
qx, qc = queue.popleft()
if qc > c:
ans += qx * c
queue.appendleft((x, qc - c))
break
else:
ans += qx * qc
c -= qc
print(ans)